﻿using System;
using System.Collections.Generic;
using System.Linq;
    
using System.Text;
using System.Threading.Tasks;

//区间操作
public class Soljd3
{

    public int MinTime(int[] b)
    {
        int len=b.Length;
        int[] a=new int[len];
        int[][] dp=new int[len][];
        int[] time = new int[len];
        int min=0;
        for (int i = 0; i < len; i++)//第几个数字
        {
            dp[i] = new int[2];
        }
        while (a[0] != b[0])//加还是乘
        {
            if (a[0] == 0)//必须加,b[i]是0不用加
            {
                a[0]++;
                dp[0][0]++;//加一次
            }
            else
            {
                if (a[0] <= (b[0] / 2))
                {
                    a[0] *= 2;
                    dp[0][1]++;//乘一次
                }
                else
                {
                    a[0]++;
                    dp[0][0]++;//加一次

                }


            }


        }

        //a to b
        //dp[i][j]=min(dp[i][j-1],dp[i-1][j])+1

        for (int i=1; i<len; i++)//第几个数字
        {
           


            while (a[i] != b[i])//加还是乘
            {
                if (a[i] == 0)//必须加,b[i]是0不用加
                {
                    a[i] ++;
                    dp[i][0]++;//加一次
                }
                else
                {
                    if (a[i] <= (b[i] / 2))
                    {
                        a[i] *=2;
                        dp[i][1]++;//乘一次
                    }
                    else
                    {
                        a[i]++;
                        dp[i][0]++;//加一次

                    }


                }


            }
            time[i] = dp[i][0] + dp[i][1];
            Console.WriteLine(time[i]);
            dp[i][0] = Math.Max(dp[i][0], dp[i - 1][0]);//小于前面的，可以跟着前面的一起操作
            dp[i][1] = Math.Max(dp[i][1], dp[i - 1][1]);


            time[i]= dp[i][0]+dp[i][1];
            //Console.WriteLine(time[i]);
            min =Math.Max(min, time[i]);
        }

        int max = MaxTime(b);
        min = Math.Min(min, max);
        return min;
    }
    public int MaxTime(int[] b)
    {
        int len = b.Length;
        int[] a = new int[len];
        int[][] dp = new int[len][];
        int[] time = new int[len];
        int min = 0;
        for (int i = 0; i < len; i++)//第几个数字
        {
            dp[i] = new int[2];
        }
        while (a[len-1] != b[len-1])//加还是乘
        {
            if (a[len - 1] == 0)//必须加,b[i]是0不用加
            {
                a[len - 1]++;
                dp[len - 1][0]++;//加一次
            }
            else
            {
                if (a[len - 1] <= (b[len - 1] / 2))
                {
                    a[len - 1] *= 2;
                    dp[len - 1][1]++;//乘一次
                }
                else
                {
                    a[len - 1]++;
                    dp[len - 1][0]++;//加一次

                }


            }


        }

        //a to b
        //dp[i][j]=min(dp[i][j-1],dp[i-1][j])+1

        for (int i = len - 2; i >=0; i--)//第几个数字
        {



            while (a[i] != b[i])//加还是乘
            {
                if (a[i] == 0)//必须加,b[i]是0不用加
                {
                    a[i]++;
                    dp[i][0]++;//加一次
                }
                else
                {
                    if (a[i] <= (b[i] / 2))
                    {
                        a[i] *= 2;
                        dp[i][1]++;//乘一次
                    }
                    else
                    {
                        a[i]++;
                        dp[i][0]++;//加一次

                    }


                }


            }
            dp[i][0] = Math.Max(dp[i][0], dp[i +1][0]);//小于前面的，可以跟着前面的一起操作
            dp[i][1] = Math.Max(dp[i][1], dp[i + 1][1]);


            time[i] = dp[i][0] + dp[i][1];
            //Console.WriteLine(time[i]);
            min = Math.Max(min, time[i]);
        }
        return min;
    }

}
//使用差分数组，l加1，r-1，中间的数都加1 
//比如12345对应的操作次数应该是12334相当于从00000到12334，
//只能对于区间+1操作的最小操作次数，12334的差分数组为11101，
//差分数组有个性质，如果对原数组区间a[l，r]都+1就是对于差分数组d[l]加一，d[r+1]-1，
//我们发现+1，-1是成对出现的，然后计算差分数组00000到11101的区间操作次数就可以了，
//可能解释的不太清楚，你可以找一道差分数组的题目做一下就理解了😂


//我们必须进行这些操作12334，这是原数组
//从00000到这些操作，可以选择一些区间a[l，r]进行加1 ，进行一次操作
//这个操作等于对 12334的差分数组---11101 ，d[l]加一，d[r+1]-1，
//00000到11101进行几对加1，减1的操作



//1
//5
//1 2 3 4 5
public class Programjd3
{
    public static void Mainjd3()
    {
        string line;
        while ((line = System.Console.ReadLine()) != null)
        { // 注意 while 处理多个 case



            string[] tokens = line.Split();
            int t = int.Parse(tokens[0]);

for(int j=0;j<t;j++) {

                line = System.Console.ReadLine();
                tokens = line.Split();
                int n = int.Parse(tokens[0]);
                int[] b= new int[n];



                line = System.Console.ReadLine();
                tokens = line.Split();
                for (int i = 0; i < tokens.Length; i++)
                {
                    b[i] = int.Parse(tokens[i]);
                }


                Soljd3 soljd3 = new Soljd3();
                int res = soljd3.MinTime(b);
                Console.WriteLine(res);


            }



        }
    }
}
